1994C - Hungry Games - CodeForces Solution


binary search data structures dp two pointers

Please click on ads to support us..

Python Code:

import bisect

for _ in range(int(input())):
    n, x = map(int, input().split())
    a = list(map(int, input().split()))
    p = [0] * (n + 1)
    d = [0] * (n + 3)
    
    for i in range(n):
        p[i + 1] = p[i] + a[i]
    
    res = 0
    for i in range(n - 1, -1, -1):
        v = p[i] + x
        idx = bisect.bisect_left(p, v)
        
        if idx > n:
            d[i] += (n - i)
        elif v == p[idx]:
            d[i] += (idx - i) + (d[idx + 1] if idx + 1 < n + 3 else 0)
        else:
            d[i] += (idx - i - 1) + (d[idx] if idx < n + 3 else 0)
    
    res = sum(d[:n])
    print(res)


Comments

Submit
0 Comments
More Questions

1025D - Recovering BST
439A - Devu the Singer and Churu the Joker
1323A - Even Subset Sum Problem
1095A - Repeating Cipher
630F - Selection of Personnel
630K - Indivisibility
20B - Equation
600B - Queries about less or equal elements
1015A - Points in Segments
1593B - Make it Divisible by 25
680C - Bear and Prime 100
1300A - Non-zero
1475E - Advertising Agency
1345B - Card Constructions
1077B - Disturbed People
653A - Bear and Three Balls
794A - Bank Robbery
157A - Game Outcome
3B - Lorry
1392A - Omkar and Password
489A - SwapSort
932A - Palindromic Supersequence
433A - Kitahara Haruki's Gift
672A - Summer Camp
1277A - Happy Birthday Polycarp
577A - Multiplication Table
817C - Really Big Numbers
1355A - Sequence with Digits
977B - Two-gram
993A - Two Squares